Bulk export, edit, and import SEO titles & meta descriptions across Shopify stores — Products, Custom Collections, Smart Collections, Pages, and Blog Posts.
Shopify MetaSync is a two-file local tool: a Node.js proxy and a browser-based HTML app. The proxy handles authentication with Shopify's Admin API; the HTML app gives you a clean UI to audit, export, edit in Excel, and push back in bulk.
Why a proxy is needed — and why it's not a big deal
Before you start — check these once
Check by opening a terminal (Command Prompt or PowerShell on Windows) and running:
If not installed, download from nodejs.org (LTS version). No npm packages are needed — the proxy uses only Node's built-in modules.
Chrome, Firefox, Edge — any modern browser works. No extension required.
Keep shopify-metasync-proxy.js and shopify-metasync.html in the same folder on your machine — e.g. C:\A1SEO\Tools\
Done once per store — takes about 60 seconds
Log in to the store via Shopify Partners (or directly). Go to Settings → Apps and sales channels → Develop apps.
If you see a banner saying "Custom app development is disabled", click Allow custom app development and confirm. This is a one-time store-level setting.
Click Create an app. Give it a recognisable name like "A1 SEO MetaSync". The app developer can be your own email.
Click Configure Admin API scopes. Enable the following permissions:
| Resource | Read | Write | Why |
|---|---|---|---|
| Products | ✓ | ✓ | Fetch & update product SEO fields |
| Custom Collections | ✓ | ✓ | Fetch & update custom collection SEO fields |
| Smart Collections | ✓ | ✓ | Fetch & update smart collection SEO fields |
| Online Store Pages | ✓ | ✓ | Fetch & update page SEO fields |
| Online Store Blogs & Blog Posts | ✓ | ✓ | Fetch & update blog article SEO fields |
Click Save after selecting all permissions. You need all five resource pairs for full functionality — you can tick just the types you plan to use if preferred, but all five is the safest default.
Click Install app → Install. On the next screen, click Reveal token once. Copy the token (starts with shpat_) and save it somewhere safe — you cannot see it again after leaving this page.
Run this every time you use the tool — takes 3 seconds
On Windows: navigate to your tools folder in File Explorer, then hold Shift and right-click → Open PowerShell window here. Or open Command Prompt and cd to the folder.
You should see:
Double-click shopify-metasync.html to open it in your browser. The Proxy Online indicator in the top-right should turn green within a few seconds.
Fetch all SEO titles and descriptions from the store
On the Export tab, enter the store URL (e.g. mystore.myshopify.com) and your shpat_ token. Leave the API Version on the default unless you have a specific reason to change it.
All types are ticked by default: Products, Collections (custom + smart), Pages, and Blog Posts. Untick any you don't need to speed things up. When Collections is ticked, the tool fetches both custom collections and smart collections in a single pass.
The tool fetches everything in paginated batches of 250 (Shopify's maximum per request). A progress bar and live log show what's happening. You can Pause or Stop at any point.
Stats appear immediately: total URLs, missing titles/descriptions, and length issues. Use the filters to drill into problems:
⚠ Missing — rows with no SEO title or no meta description
📏 Too Long — titles over 60 chars, descriptions over 160 chars
Click Download CSV. The file is named shopify-meta-[store]-[date].csv and contains all rows (or filtered rows if filters are active).
The recommended workflow for bulk changes
The CSV has these columns: type, id, blog_id, handle, url, title, seo_title, seo_description
Do not modify type, id, blog_id, or handle — these are used to match rows back to the correct Shopify resource. If they're altered, the import will fail or push to the wrong resource.
The import tool diffs every row against the live value before pushing. Unchanged rows are skipped automatically — you don't need to delete them from the CSV.
In Excel: File → Save As → CSV UTF-8 (Comma delimited). In Google Sheets: File → Download → CSV.
Diff, review, and push — only changed rows are updated
Enter the same store URL and token (or a different store if you're applying edits cross-store).
Click the upload zone or drag your CSV onto it. The tool parses it instantly and auto-ticks the type checkboxes based on what resource types are in the file.
The tool fetches the current live values from Shopify for every row and compares them against your CSV. Each row is tagged:
🟡 Changed — your CSV has a different value to what's live
🟢 New — the live resource had no SEO field; your CSV adds one
⚪ Same — identical; will be skipped
Use the filter buttons to see only Changed or New rows. Deselect any you don't want to push. Use the top checkbox to select/deselect all.
A confirmation prompt shows how many rows will be updated. Confirm to start. A snapshot of the original live values is saved automatically for undo. Changes push at a controlled rate (250ms between requests) to stay within Shopify's API limits.
Full revert in one click — within the same session
The Undo button appears next to Push Changes after a push completes. Clicking it will re-push the original live values (captured during Preview) back to every row that was changed.
http://127.0.0.1:3457/health every 5 seconds. If it stays offline: (1) confirm the terminal shows "Proxy running…"; (2) check nothing else is using port 3457 — if so, the proxy prints an "address already in use" error; (3) try restarting the terminal and running the proxy again. Also try a hard refresh of the HTML page (Ctrl+Shift+R).shpat_). Then go back to the custom app in Shopify admin, confirm all four Read+Write permissions are saved and the app is installed. If you recently changed scopes, you may need to reinstall the app.metafields_global_title_tag and metafields_global_description_tag) and are updated via their respective API endpoints.metafields_global_title_tag and metafields_global_description_tag. Some themes or third-party SEO apps (like Plug In SEO or Smart SEO) store these in custom metafields instead. If the export comes back empty, the store is likely using a different storage method — contact the A1 SEO tech team to investigate.127.0.0.1 (localhost) — it cannot be reached from outside your machine. It does not log or store your token; it reads it from the request header and forwards it to Shopify, then discards it.